<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>intc: xintc_low_level_example.c File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="HTML_custom.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="xlogo_bg.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">intc
   </div>
   <div id="projectbrief">Vitis Drivers API Documentation</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Overview</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li><a href="globals.html"><span>APIs</span></a></li>
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="pages.html"><span>Examples</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('xintc__low__level__example_8c.html','');});
</script>
<div id="doc-content">
<div class="header">
  <div class="summary">
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">xintc_low_level_example.c File Reference</div>  </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Overview</h2>
<div class="textblock"><p>This file contains a design example using the low level-0 driver, interface of the Interrupt Controller driver. </p>
<p>This example shows the use of the Interrupt Controller both with a PowerPC and a MicroBlaze processor.</p>
<dl class="section note"><dt>Note</dt><dd>This example can also be used for Cascade mode interrupt controllers by using the interrupt IDs generated in xparameters.h. For Cascade mode, Interrupt IDs are generated in xparameters.h as shown below:</dd></dl>
<p>Master/Primary INTC </p>
<hr/>
<p> | |-0 Secondary INTC | |-. ______ | |-. | |-32 Last INTC | |-. | |-. ______ |______|&lt;&ndash;31--&mdash;| |-. | |-64 | |-. | |-. |______|&lt;&ndash;63---&mdash;| |-. | |-. |______|-95</p>
<p>All driver functions has to be called using BaseAddress of Primary/Master Controller only. Driver functions takes care of Slave Controllers based on Interrupt ID passed. User must not use Interrupt source/ID 31 of Primary and Secondary controllers to call driver functions.</p>
<pre></pre><pre>MODIFICATION HISTORY:</pre><pre>Ver   Who  Date  Changes
</p>
<hr/>
<p>
1.00c rpm  12/04/03 First release
1.00c sv   06/29/05 Minor changes to comply to Doxygen and coding guidelines
2.00a ktn  10/20/09 Updated to use HAL Processor APIs and _m is removed from
              all the macro names/definitions. Minor changes done as per
              coding guidelines.
3.6   ms   01/23/17 Added xil_printf statement in main function to
                    ensure that "Successfully ran" and "Failed" strings
                    are available in all examples. This is a fix for
                    CR-965028.
3.18  mus  03/27/24 Added handling for FAST interrupts.
</pre> </div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a83f2cbdf0d928c5fb6401e2abd071b56"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xintc__low__level__example_8c.html#a83f2cbdf0d928c5fb6401e2abd071b56">IntcLowLevelExample</a> (u32 IntcBaseAddress)</td></tr>
<tr class="memdesc:a83f2cbdf0d928c5fb6401e2abd071b56"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function is an example of how to use the interrupt controller driver component (<a class="el" href="struct_x_intc.html" title="The XIntc driver instance data. ">XIntc</a>) and the hardware device.  <a href="#a83f2cbdf0d928c5fb6401e2abd071b56">More...</a><br/></td></tr>
<tr class="separator:a83f2cbdf0d928c5fb6401e2abd071b56"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0838d944ebf56cbdfce4d481eab585e8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xintc__low__level__example_8c.html#a0838d944ebf56cbdfce4d481eab585e8">SetupInterruptSystem</a> ()</td></tr>
<tr class="memdesc:a0838d944ebf56cbdfce4d481eab585e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function connects the interrupt handler of the interrupt controller to the processor.  <a href="#a0838d944ebf56cbdfce4d481eab585e8">More...</a><br/></td></tr>
<tr class="separator:a0838d944ebf56cbdfce4d481eab585e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d6264927eb02cdac505c92079fa9e03"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xintc__low__level__example_8c.html#a2d6264927eb02cdac505c92079fa9e03">DeviceDriverHandler</a> (void *CallbackRef)</td></tr>
<tr class="memdesc:a2d6264927eb02cdac505c92079fa9e03"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function is designed to look like an interrupt handler in a device driver.  <a href="#a2d6264927eb02cdac505c92079fa9e03">More...</a><br/></td></tr>
<tr class="separator:a2d6264927eb02cdac505c92079fa9e03"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a840291bc02cba5474a4cb46a9b9566fe"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xintc__low__level__example_8c.html#a840291bc02cba5474a4cb46a9b9566fe">main</a> (void)</td></tr>
<tr class="memdesc:a840291bc02cba5474a4cb46a9b9566fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">This is the main function for the Interrupt Controller Low Level example.  <a href="#a840291bc02cba5474a4cb46a9b9566fe">More...</a><br/></td></tr>
<tr class="separator:a840291bc02cba5474a4cb46a9b9566fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="a2d6264927eb02cdac505c92079fa9e03"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void DeviceDriverHandler </td>
          <td>(</td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>CallbackRef</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function is designed to look like an interrupt handler in a device driver. </p>
<p>This is typically a 2nd level handler that is called from the interrupt controller interrupt handler. This handler would typically perform device specific processing such as reading and writing the registers of the device to clear the interrupt condition and pass any data to an application using the device driver.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">CallbackRef</td><td>is passed back to the device driver's interrupt handler by the <a class="el" href="struct_x_intc.html" title="The XIntc driver instance data. ">XIntc</a> driver. It was given to the <a class="el" href="struct_x_intc.html" title="The XIntc driver instance data. ">XIntc</a> driver in the <a class="el" href="group__intc.html#gaee9ec5873a764994d64b4da35a110084" title="Makes the connection between the Id of the interrupt source and the associated handler that is to run...">XIntc_Connect()</a> function call. It is typically a pointer to the device driver instance variable if using the Xilinx Level 1 device drivers. In this example, we do not care about the callback reference, so we passed it a 0 when connecting the handler to the <a class="el" href="struct_x_intc.html" title="The XIntc driver instance data. ">XIntc</a> driver and we make no use of it here.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>None.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>None. </dd></dl>

</div>
</div>
<a class="anchor" id="a83f2cbdf0d928c5fb6401e2abd071b56"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int IntcLowLevelExample </td>
          <td>(</td>
          <td class="paramtype">u32&#160;</td>
          <td class="paramname"><em>IntcBaseAddress</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function is an example of how to use the interrupt controller driver component (<a class="el" href="struct_x_intc.html" title="The XIntc driver instance data. ">XIntc</a>) and the hardware device. </p>
<p>This function is designed to work without any hardware devices to cause interrupts. It may not return if the interrupt controller is not properly connected to the processor in either software or hardware.</p>
<p>This function relies on the fact that the interrupt controller hardware has come out of the reset state such that it will allow interrupts to be simulated by the software.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">IntcBaseAddress</td><td>is Base Address of the the Interrupt Controller Device.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>XST_SUCCESS to indicate success, otherwise XST_FAILURE.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>None. </dd></dl>

<p>References <a class="el" href="xintc__example_8c.html#a2d6264927eb02cdac505c92079fa9e03">DeviceDriverHandler()</a>, <a class="el" href="group__intc.html#gaf8c9b9342d3f4190fe131c29765a1e02">LookupConfigByBaseAddress()</a>, <a class="el" href="xintc__low__level__example_8c.html#a0838d944ebf56cbdfce4d481eab585e8">SetupInterruptSystem()</a>, <a class="el" href="struct_x_intc___config.html#a630c8585f41eea348ae0d6d134b0ad8f">XIntc_Config::VectorAddrWidth</a>, <a class="el" href="group__intc.html#gad35ec3b9b658f26d989b19783954683e">XIntc_EnableIntr</a>, and <a class="el" href="group__intc.html#ga4bd1d34885340943143c8fd2f98a3963">XIntc_RegisterHandler()</a>.</p>

<p>Referenced by <a class="el" href="xintc__low__level__example_8c.html#a840291bc02cba5474a4cb46a9b9566fe">main()</a>.</p>

</div>
</div>
<a class="anchor" id="a840291bc02cba5474a4cb46a9b9566fe"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int main </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This is the main function for the Interrupt Controller Low Level example. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">None.</td><td></td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>XST_SUCCESS to indicate success, otherwise XST_FAILURE.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>None. </dd></dl>

<p>References <a class="el" href="xintc__low__level__example_8c.html#a83f2cbdf0d928c5fb6401e2abd071b56">IntcLowLevelExample()</a>.</p>

</div>
</div>
<a class="anchor" id="a0838d944ebf56cbdfce4d481eab585e8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void SetupInterruptSystem </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function connects the interrupt handler of the interrupt controller to the processor. </p>
<p>This function is separate to allow it to be customized for each application. Each processor or RTOS may require unique processing to connect the interrupt handler.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">None.</td><td></td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>None.</dd></dl>
<dl class="section note"><dt>Note</dt><dd>None. </dd></dl>

<p>References <a class="el" href="group__intc.html#gace91a1aeaf1a88e1b769decb4ac4a818">XIntc_DeviceInterruptHandler()</a>.</p>

<p>Referenced by <a class="el" href="xintc__low__level__example_8c.html#a83f2cbdf0d928c5fb6401e2abd071b56">IntcLowLevelExample()</a>.</p>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
	<p class="footer">&copy; Copyright 2015-2022 Xilinx, Inc. All Rights Reserved.</p>
	<p class="footer">&copy; Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.</p>
</div>
</body>
</html>
